const jwt = require("jsonwebtoken");
const svgCaptcha = require("svg-captcha");
const Controller = require('egg').Controller;
// 定义登录的校验规则
const createRule = {
    username: 'string',
    password: 'password',
};
class UserController extends Controller {
    async index() {
        const { ctx, app } = this;
        console.log(ctx.myparams);
        const result = await ctx.service.user.index(ctx.myparams);
        if (result.length > 0) {
            ctx.body = {
                code: 1,
                result
            }
        } else {
            ctx.body = {
                code: 0,
                msg: "找不到"
            }
        }
    }
    // 登录
    async login() {
        const { ctx } = this;
        // 通过 try catch 来捕获错误
        console.log(ctx.myparams);
        let { text } = ctx.myparams;  //  获取验证码  并判断
        if (text.toUpperCase() !== ctx.session.text.toUpperCase()) {
            ctx.body = { cod:4, msg:"验证码不一致"}
            return;
        }
        try {
            ctx.validate(createRule, ctx.request.body);  //  校验参数
            const hasUser = await ctx.service.user.index(ctx.myparams);
            if (hasUser.length < 1) {
                ctx.body = { code: 0, msg: "用户名不存在，请重新输入或者立即注册" }
                return;
            }
            const result = await ctx.service.user.userLogin(ctx.myparams);
            let token = jwt.sign({ ...result }, '123', { expiresIn: '2h' }) //  token 有效期为 2小时
            console.log('------', result)
            if (result) { ctx.body = { code: 1, token, uid: result.uid, msg: "登录成功" } } else { ctx.body = { code: 0, msg: "登录失败" } }
        } catch (error) {
            ctx.body = { code: 403, msg: "参数有误！！" }
        }

    }
    // 注册
    async registry() {
        const { ctx } = this;
        const hasUser = await ctx.service.user.index(ctx.myparams);
        if (hasUser.length > 0) {
            ctx.body = { code: 0, msg: "用户名已存在，请登录 或者 重新输入！" }
            return;
        }
        try {
            ctx.validate(createRule, ctx.request.body);  //  校验参数
            const result = await ctx.service.user.userRegisty(ctx.myparams);
            if (result.affectedRows > 0) { ctx.body = { code: 1, msg: "注册成功" } } else { ctx.body = { code: 0, msg: "注册失败" } }
        } catch (error) {
            ctx.body = { code: 0, msg: "参数校验失败" }
        }

    }
    // 验证码
    async verify() {
        const { ctx } = this;
        const captcha = await svgCaptcha.create({
            size: 4, //验证码长度
            fontSize: 45, //验证码字号
            noise: 1, //干扰线条数目
            width: 100, //宽度
            height: 36, //高度
            color: true, //验证码字符是否有颜色，默认是没有，但是如果设置了背景颜色，那么默认就是有字符颜色
            background: '#ccc' //beijing
        })

        ctx.session.text = captcha.text
        ctx.response.type = 'image/svg+xml'
        ctx.body = captcha.data
    }
}

module.exports = UserController;